﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SudokuValidator
{
    public class Validator
    {
        public Puzzle puzzle;
        public Validator()
        {
            this.puzzle = new Puzzle();
        }

        public Validator(Puzzle puzzle)
        {
            this.puzzle = puzzle;
        }

        public bool CheckValidity()
        {
            return checkRanges() && checkRows() && checkColumns() && checkBoxes();
        }

        private bool checkRanges()
        {
            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    if (puzzle.GetIndex(i, j) < 10 && puzzle.GetIndex(i, j) >= 0)
                    {
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            return true;
        }

        private bool checkRows()
        {
            for (int i = 0; i < 9; i++)
            {
                int[] row = puzzle.GetRow(i);
                List<int> values = new List<int>();
                for (int j = 0; j < 9; j++)
                {
                    if (values.Contains(row[j]))
                    {
                        return false;
                    }
                    else
                    {
                        values.Add(row[j]);
                    }
                }
            }
            return true;
        }

        private bool checkColumns()
        {
            for (int i = 0; i < 9; i++)
            {
                int[] row = puzzle.GetColumn(i);
                List<int> values = new List<int>();
                for (int j = 0; j < 9; j++)
                {
                    if (values.Contains(row[j]))
                    {
                        return false;
                    }
                    else
                    {
                        values.Add(row[j]);
                    }
                }
            }
            return true;
        }

        private bool checkBoxes()
        {
            for (int i = 0; i < 9; i++)
            {
                int[] row = puzzle.GetBox(i);
                List<int> values = new List<int>();
                for (int j = 0; j < 9; j++)
                {
                    if (values.Contains(row[j]))
                    {
                        return false;
                    }
                    else
                    {
                        values.Add(row[j]);
                    }
                }
            }
            return true;
        }

    }
}
